<?php
/** .-------------------------------------------------------------------
 * |    Author: 熊伟洋 <chelious@foxmail.com>
 * |    WeChat: hello_McGrady
 * |           QQ: 434493420
 * |     Motto: Hungry & Humble
 * |---------------------------------------------------------------------
 * |    Copyright (c) 2012-2020, www.chelious.com. All Rights Reserved.
 * '-------------------------------------------------------------------*/

namespace system\model;

use hdphp\Model\Model;

class Article extends Model
{
    //数据表
    protected $table = "article";

    //允许填充字段
    protected $allowFill = [];

    //禁止填充字段
    protected $denyFill = [];

    //完整表名
    protected $full = false;

    //自动验证
    protected $validate = [
        //['字段名','验证方法','提示信息',验证条件,验证时间]
        ['title', 'required', '标题不能为空', 3, 3],
        ['author', 'required', '作者不能为空', 3, 3],
        ['category_cid', 'required', '分类不能为空', 3, 3],
        ['thumb', 'required', '缩略图必须上传', 3, 3],
        ['digest', 'required', '摘要不能为空', 3, 3],
        ['keywords', 'required', '关键字不能为空', 3, 3],
    ];

    //自动完成
    protected $auto = [
        //['字段名','处理方法','方法类型',验证条件,验证时机]
        /**
         * 这里自动选择时机插入时间信息
         */
        ['sendtime', 'time', 'function', 3, 1],
        ['updatetime', 'time', 'function', 3, 2],
    ];

    //自动过滤
    protected $filter = [
        //[表单字段名,过滤条件,处理时间]
    ];

    //时间操作,需要表中存在created_at,updated_at字段
    protected $timestamps = false;

    /**
     * 文章添加方法
     */
    public function add()
    {
//	    p($_POST);

        /**
         * 文章数据表和文章标签表的数据验证不能写在文章表的自动验证里
         * 所以在这里加上服务验证
         */

        //文章数据表验证
        Validate::make([
            //['字段名','验证方法','提示信息',验证条件,验证时间]
            ['keywords', 'required', '关键字不能为空', 3, 3],
            ['des', 'required', '文章描述不能为空', 3],
            ['content', 'required', '文章内容不能为空', 3],
        ]);

        //文章标签表服务验证
        Validate::make([
            ['tag_tid', 'required', '标签不能为空', 3],
        ]);


        //1.添加文章表
        $article = new Article();
        $article['title'] = Q('post.title');
        $article['thumb'] = Q('post.thumb');
        $article['digest'] = Q('post.digest');
        $article['author'] = Q('post.author');
        $article['keywords'] = Q('post.keywords');
        $article['user_uid'] = $_SESSION['admin']['uid'];
        $article['category_cid'] = Q('post.category_cid');
        //此save()方法在有主键的时候会返回当前操作的主键值
        $aid = $article->save();

        //2.添加文章数据表
        $articleData = new \system\model\Article_data();
        $articleData['keywords'] = Q('post.keywords');
        $articleData['des'] = Q('post.des');
        $articleData['content'] = Q('post.content');
        $articleData['article_aid'] = $aid;
        $articleData->save();


        //3.添加文章标签表
        $articleTag = new \system\model\Article_tag();
        //获取的标签是一个数组
        $tagDatas = Q('post.tag_tid');
//        p($tagDatas);
        /**
         * 数组的值$v就是tag_tid
         * article_aid就用当前获取的aid
         */
        foreach ($tagDatas as $k => $v) {
            $articleTag['article_aid'] = $aid;
            $articleTag['tag_tid'] = $v;
            $articleTag->save();
        }
        return true;

    }

    /**
     * 文章编辑方法
     * 首先，传递了一个文章表的aid过来，凭此可以find文章表的对象
     * 对于文章数据表来说，它没有主键，不能使用find方法，又是要修改而不是全盘添加，则必须使用Db数据库组件来操作
     * 对于文章标签表来说，它虽然没有主键，但是对于它我们不予以修改，而是先全盘删除，之后再全盘添加进去，不需要筛选添加
     */
    public function edit()
    {
//        p($_POST);
        $aid = Q('get.aid');
        //实例化文章表的对象，根据获取的主键aid创建
        $article = Article::find($aid);
        //更新文章表的数据
        $article['title'] = Q('post.title');
        $article['thumb'] = Q('post.thumb');
        $article['digest'] = Q('post.digest');
        $article['author'] = Q('post.author');
        $article['keywords'] = Q('post.keywords');
        $article['user_id'] = $_SESSION['admin']['uid'];
        $article['category_cid'] = Q('post.category_cid');
        $article->save();

        //更新文章数据表的数据
        $articleData = new \system\model\Article_data();
        //注意，这里不能用save()
        $data = [
            'keywords' => Q('post.keywords'),
            'des' => Q('post.des'),
            'content' => Q('post.content'),
        ];
        $articleData->where('article_aid', $aid)->update($data);

        //更新文章标签表，注意先删除后添加
        $articleTag = new \system\model\Article_tag();
        $articleTag->where('article_aid', $aid)->delete();

        $articleTag = new \system\model\Article_tag();
        //获取选中的标签tag_tid
        $tagData = Q('post.tag_tid');
        foreach ($tagData as $k => $v) {
            //添加数据
            $articleTag['article_aid'] = $aid;
            $articleTag['tag_tid'] = $v;
            $articleTag->save();
        }
        return true;
    }

}